static class ActorManager
{
- static Game Game;
+ static SuperPolarity Game;
static int OutlierBounds;
- static List<Actor> Actors;
+ static IList<Actor> Actors;
static ActorManager()
{
static public void CheckOut(Actor actor)
{
+ actor.CleanUp();
Actors.Remove(actor);
+ actor = null;
}
static public void Update(GameTime gameTime)
static void CheckActors()
{
- var i = 0;
- foreach (Actor actor in Actors)
+ for (var i = Actors.Count - 1; i >= 0; i--)
{
- i++;
- foreach (Actor other in Actors.Skip(i))
+ if (i >= Actors.Count) {
+ i = Actors.Count - 1;
+ }
+
+ if (Actors.Count == 0)
{
+ return;
+ }
+
+ Actor actor = Actors[i];
+ for (var j = i - 1; j >= 0; j--)
+ {
+ Actor other = Actors[j];
+
CheckCollision(actor, other);
if (actor.GetType().IsSubclassOf(typeof(Ship)) && other.GetType().IsSubclassOf(typeof(Ship)))
static void CheckCollision(Actor actor, Actor other)
{
+ var collision = Rectangle.Intersect(actor.Box, other.Box);
+ var inverseCollision = Rectangle.Intersect(other.Box, actor.Box);
+ if (!collision.IsEmpty && !actor.Dying && !other.Dying)
+ {
+ actor.Collide(other, collision);
+ other.Collide(actor, inverseCollision);
+ }
}
actor.Position.Y > Game.GraphicsDevice.Viewport.Height + OutlierBounds)
{
CheckOut(actor);
+ if (actor.Parent != null)
+ {
+ actor.Parent.Children.Remove(actor);
+ }
}
}
}
- internal static void SetGame(Game game)
+ static public void Empty()
+ {
+ foreach (Actor actor in Actors) {
+ actor.CleanUp();
+ }
+ Actors.Clear();
+ }
+
+ internal static void SetGame(SuperPolarity game)
{
Game = game;
}
+
+ public static void Bomb()
+ {
+ for (var i = Actors.Count - 1; i >= 0; i--)
+ {
+ var actor = Actors[i];
+ if (actor.GetType() == typeof(StandardShip))
+ {
+ CheckOut(actor);
+ Renderer.CheckOut(actor);
+ }
+ }
+ }
+
+ public static int CountBaddies()
+ {
+ return Actors.Where(a => a.GetType() == typeof(StandardShip)).Count();
+ }
}
}